package com.jeesite.modules.ic.channel.config;


import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;

import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;

/**
 * @author lihanbing
 * @date 2022/12/26
 * @apiNote
 */
public class TokenApiConfig {
    /**
     * 服务器地址
     */
    public final static String APPURL = "http://sop.mingy-iot.com";
    /**
     * 应用ID
     */
    public final static String APPID = "k6J0JECXzvQUnuty1qoysMuQGvYBLdsE";
    /**
     * 应用密钥
     */
    public final static String APPSECRET = "u8XeqiaQutiXBdZdpHDjaqRQkmDfQ6dh";
    /**
     * 产品ID
     */
    public final static String TENANTID = "1452902210060161024";
    /**
     * 密码加密密匙
     */
    public final static String ENCODEKEY = "uBdUx82vPHkDKb284d7NkjFoNcKWBuka";
    /**
     * 密码加密参数
     */
    public final static String IVKEY = "oCRU0D1wKfBlNeTz";
    /**
     * 用户名
     */
    public final static String USERNAME = "yanbo01";
    /**
     * 登陆密码
     */
    public final static String PASSWORD = "Yanbo@2022";
    /**
     * 签名验证加密密匙
     */
    public final static String PUSHKEY = "N43WKMDNG53DK";


    /**
     * 获取登录请求认证
     * appId+":"+appSecret ase64转码生成
     * 这里用的是Hutool工具类实现
     * 你也可以用其他方式实现
     * @return Authorization
     */
    public static String getLoginAuthorization(){
        System.out.println("Basic " +Base64.encode(APPID + ":" + APPSECRET));
        return  "Basic " + Base64.encode(APPID + ":" + APPSECRET);
    }

    public static String getEncodePassWord(){
        AES aes = new AES(Mode.CBC, Padding.ZeroPadding,
                new SecretKeySpec(ENCODEKEY.getBytes(),"AES"),
                new IvParameterSpec(IVKEY.getBytes()));
        return aes.encryptBase64(PASSWORD, StandardCharsets.UTF_8);
    }

    public static void main(String[] args) {

        System.out.println(getEncodePassWord());

        ////链式构建请求
        //Map<String,Object> paramMap = new HashMap<>();
        //paramMap.put("username",USERNAME);
        //paramMap.put("password",getEncodePassWord());
        //paramMap.put("grant_type","password");
        //paramMap.put("scope","server");
        //String result2 = HttpRequest.post(APPURL+"/auc/oauth/token")
        //        .header("content-type", "application/x-www-form-urlencoded")//头信息，多个头信息多次调用此方法即可
        //        .header("Tenant", TENANTID)//头信息，多个头信息多次调用此方法即可
        //        .header("Authorization", getLoginAuthorization())//头信息，多个头信息多次调用此方法即可
        //        .form(paramMap)//表单内容
        //        .timeout(20000)//超时，毫秒
        //        .execute().body();
        //
        //JSONObject jsonObject = JSONObject.parseObject(result2);
        //System.out.println(jsonObject.toJSONString());
        //
        //String access_token = jsonObject.getString("access_token");
        ////链式构建请求
        //Map<String,Object> paramMapTaocan = new HashMap<>();
        //paramMapTaocan.put("iccid","89860620170018000234");
        //paramMapTaocan.put("realTime",true);
        //String result3 = HttpRequest.get(APPURL+"/platform/api/usage/current-renewlist-usage-details")
        //        .header("content-type", "application/x-www-form-urlencoded")//头信息，多个头信息多次调用此方法即可
        //        .header("Tenant", TENANTID)//头信息，多个头信息多次调用此方法即可
        //        .header("Authorization", "Bearer "+access_token)//头信息，多个头信息多次调用此方法即可
        //        .form(paramMapTaocan)//表单内容
        //        .timeout(20000)//超时，毫秒
        //        .execute().body();
        //JSONObject jsonObject1 = JSONObject.parseObject(result3);
        //System.out.println(jsonObject1.toJSONString());
        //
        ////链式构建请求
        //Map<String,Object> paramMaplishi = new HashMap<>();
        //paramMaplishi.put("iccid","89860620170018000234");
        //paramMaplishi.put("month","12");
        //paramMaplishi.put("year","2022");
        //String result4 = HttpRequest.get(APPURL+"/platform/api/usage/device-usage-history")
        //        .header("content-type", "application/x-www-form-urlencoded")//头信息，多个头信息多次调用此方法即可
        //        .header("Tenant", TENANTID)//头信息，多个头信息多次调用此方法即可
        //        .header("Authorization", "Bearer "+access_token)//头信息，多个头信息多次调用此方法即可
        //        .form(paramMaplishi)//表单内容
        //        .timeout(20000)//超时，毫秒
        //        .execute().body();
        //JSONObject jsonObject2 = JSONObject.parseObject(result4);
        //System.out.println(jsonObject2.toJSONString());
        //
        ////链式构建请求
        //Map<String,Object> paramMapZhuangtai = new HashMap<>();
        //paramMapZhuangtai.put("iccid","89860620170018000234");
        //String result5 = HttpRequest.get(APPURL+"/platform/api/device/device-status")
        //        .header("content-type", "application/x-www-form-urlencoded")//头信息，多个头信息多次调用此方法即可
        //        .header("Tenant", TENANTID)//头信息，多个头信息多次调用此方法即可
        //        .header("Authorization", "Bearer "+access_token)//头信息，多个头信息多次调用此方法即可
        //        .form(paramMapZhuangtai)//表单内容
        //        .timeout(20000)//超时，毫秒
        //        .execute().body();
        //JSONObject jsonObject3 = JSONObject.parseObject(result5);
        //System.out.println(jsonObject3.toJSONString());

    }
}

